package edu.client;

import com.google.gwt.user.client.ui.PopupPanel;

import edu.shared.DTO.DireccionDTO;
import edu.shared.DTO.ProveedorDTO;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.LayoutPanel;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.TextArea;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.ClickEvent;

public class P_DetalleProveedor extends PopupPanel {
	
	private static final int COL_NOMBRE = 0;
	private static final int COL_CARGO = 1;
	private static final int COL_TELEFONO_EMPRESA = 2;
	private static final int COL_INTERNO = 3;
	private static final int COL_TELEFONO_PARTICULAR = 4;
	private static final int COL_CELULAR = 5;
	private static final int COL_CORREO = 6;
	
	FlexTable ftContactos;
	
	private ProveedorDTO proveedor;
	
	public P_DetalleProveedor(ProveedorDTO p) {

		super();
		
		this.proveedor = p;
		
		setStyleName("fondoPopup");
		
		LayoutPanel panel = new LayoutPanel();
		setWidget(panel);
		panel.setSize("697px", "670px");
		
		Label lblDetalleProveedor = new Label("DETALLE DEL PROVEEDOR");
		lblDetalleProveedor.setStyleName("labelTitulo");
		panel.add(lblDetalleProveedor);
		panel.setWidgetLeftWidth(lblDetalleProveedor, 2.5, Unit.PCT, 95.0, Unit.PCT);
		panel.setWidgetTopHeight(lblDetalleProveedor, 15.0, Unit.PX, 50.0, Unit.PX);
		
		Label nombreLabel = new Label("NOMBRE:");
		nombreLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		nombreLabel.setStyleName("gwt-LabelFormulario");
		panel.add(nombreLabel);
		panel.setWidgetLeftWidth(nombreLabel, 0.0, Unit.PCT, 19.8, Unit.PCT);
		panel.setWidgetTopHeight(nombreLabel, 70.0, Unit.PX, 19.0, Unit.PX);
		
		TextBox nombreTB = new TextBox();
		panel.add(nombreTB);
		panel.setWidgetLeftWidth(nombreTB, 20.0, Unit.PCT, 25.0, Unit.PCT);
		panel.setWidgetTopHeight(nombreTB, 65.0, Unit.PX, 32.0, Unit.PX);
		nombreTB.setText(formatear(proveedor.getNombre()));
		nombreTB.setEnabled(false);
		
		Label rubroLabel = new Label("RUBRO:");
		rubroLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		rubroLabel.setStyleName("gwt-LabelFormulario");
		panel.add(rubroLabel);
		panel.setWidgetLeftWidth(rubroLabel, 50.0, Unit.PCT, 19.8, Unit.PCT);
		panel.setWidgetTopHeight(rubroLabel, 70.0, Unit.PX, 19.0, Unit.PX);
		
		TextBox rubroTB = new TextBox();
		panel.add(rubroTB);
		panel.setWidgetLeftWidth(rubroTB, 70.0, Unit.PCT, 25.0, Unit.PCT);
		panel.setWidgetTopHeight(rubroTB, 65.0, Unit.PX, 32.0, Unit.PX);
		rubroTB.setText(formatear(proveedor.getRubro()));
		rubroTB.setEnabled(false);
		
		Label cuitLabel = new Label("CUIT:");
		cuitLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		cuitLabel.setStyleName("gwt-LabelFormulario");
		panel.add(cuitLabel);
		panel.setWidgetLeftWidth(cuitLabel, 0.0, Unit.PCT, 19.8, Unit.PCT);
		panel.setWidgetTopHeight(cuitLabel, 105.0, Unit.PX, 19.0, Unit.PX);
		
		TextBox cuitTB = new TextBox();
		panel.add(cuitTB);
		panel.setWidgetLeftWidth(cuitTB, 20.0, Unit.PCT, 25.0, Unit.PCT);
		panel.setWidgetTopHeight(cuitTB, 100.0, Unit.PX, 32.0, Unit.PX);
		cuitTB.setText(formatear(proveedor.getCuit()));
		cuitTB.setEnabled(false);
		
		Label responsableLabel = new Label("RESPONSABLE:");
		responsableLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		responsableLabel.setStyleName("gwt-LabelFormulario");
		panel.add(responsableLabel);
		panel.setWidgetLeftWidth(responsableLabel, 50.0, Unit.PCT, 19.8, Unit.PCT);
		panel.setWidgetTopHeight(responsableLabel, 105.0, Unit.PX, 19.0, Unit.PX);
		
		TextBox responsableTB = new TextBox();
		panel.add(responsableTB);
		panel.setWidgetLeftWidth(responsableTB, 70.0, Unit.PCT, 25.0, Unit.PCT);
		panel.setWidgetTopHeight(responsableTB, 100.0, Unit.PX, 32.0, Unit.PX);
		responsableTB.setText(formatear(proveedor.getResponsable()));
		responsableTB.setEnabled(false);
		
		Label direccionLabel = new Label("DIRECCIÓN:");
		direccionLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		direccionLabel.setStyleName("gwt-LabelFormulario");
		panel.add(direccionLabel);
		panel.setWidgetLeftWidth(direccionLabel, 0.0, Unit.PCT, 19.8, Unit.PCT);
		panel.setWidgetTopHeight(direccionLabel, 140.0, Unit.PX, 19.0, Unit.PX);
		
		TextArea direccionTA = new TextArea();
		panel.add(direccionTA);
		panel.setWidgetLeftWidth(direccionTA, 20.0, Unit.PCT, 75.0, Unit.PCT);
		panel.setWidgetTopHeight(direccionTA, 135.0, Unit.PX, 47.0, Unit.PX);
		direccionTA.setText(formatear(formatearDireccion(proveedor.getDireccion())));
		direccionTA.setEnabled(false);
		
		Label telefonoLabel = new Label("TELÉFONO:");
		telefonoLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		telefonoLabel.setStyleName("gwt-LabelFormulario");
		panel.add(telefonoLabel);
		panel.setWidgetLeftWidth(telefonoLabel, 0.0, Unit.PCT, 19.8, Unit.PCT);
		panel.setWidgetTopHeight(telefonoLabel, 190.0, Unit.PX, 19.0, Unit.PX);
		
		TextBox telefonoTB = new TextBox();
		panel.add(telefonoTB);
		panel.setWidgetLeftWidth(telefonoTB, 20.0, Unit.PCT, 25.0, Unit.PCT);
		panel.setWidgetTopHeight(telefonoTB, 185.0, Unit.PX, 32.0, Unit.PX);
		telefonoTB.setText(formatear(proveedor.getTelefono()));
		telefonoTB.setEnabled(false);
		
		Label faxLabel = new Label("FAX:");
		faxLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		faxLabel.setStyleName("gwt-LabelFormulario");
		panel.add(faxLabel);
		panel.setWidgetLeftWidth(faxLabel, 50.0, Unit.PCT, 19.8, Unit.PCT);
		panel.setWidgetTopHeight(faxLabel, 190.0, Unit.PX, 19.0, Unit.PX);
		
		TextBox faxTB = new TextBox();
		panel.add(faxTB);
		panel.setWidgetLeftWidth(faxTB, 70.0, Unit.PCT, 25.0, Unit.PCT);
		panel.setWidgetTopHeight(faxTB, 185.0, Unit.PX, 32.0, Unit.PX);
		faxTB.setText(formatear(proveedor.getFax()));
		faxTB.setEnabled(false);
		
		Label mailLabel = new Label("E-MAIL:");
		mailLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		mailLabel.setStyleName("gwt-LabelFormulario");
		panel.add(mailLabel);
		panel.setWidgetLeftWidth(mailLabel, 0.0, Unit.PCT, 19.8, Unit.PCT);
		panel.setWidgetTopHeight(mailLabel, 225.0, Unit.PX, 19.0, Unit.PX);
		
		TextBox mailTB = new TextBox();
		panel.add(mailTB);
		panel.setWidgetLeftWidth(mailTB, 20.0, Unit.PCT, 25.0, Unit.PCT);
		panel.setWidgetTopHeight(mailTB, 220.0, Unit.PX, 32.0, Unit.PX);
		mailTB.setText(formatear(proveedor.getMail()));
		mailTB.setEnabled(false);
		
		Label paginaWebLabel = new Label("PÁGINA WEB:");
		paginaWebLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		paginaWebLabel.setStyleName("gwt-LabelFormulario");
		panel.add(paginaWebLabel);
		panel.setWidgetLeftWidth(paginaWebLabel, 50.0, Unit.PCT, 19.8, Unit.PCT);
		panel.setWidgetTopHeight(paginaWebLabel, 225.0, Unit.PX, 19.0, Unit.PX);
		
		TextBox paginaWebTB = new TextBox();
		panel.add(paginaWebTB);
		panel.setWidgetLeftWidth(paginaWebTB, 70.0, Unit.PCT, 25.0, Unit.PCT);
		panel.setWidgetTopHeight(paginaWebTB, 220.0, Unit.PX, 32.0, Unit.PX);
		paginaWebTB.setText(formatear(proveedor.getPaginaWeb()));
		paginaWebTB.setEnabled(false);

		Label observacionesLabel = new Label("OBSERVACIONES:");
		observacionesLabel.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
		observacionesLabel.setStyleName("gwt-LabelFormulario");
		panel.add(observacionesLabel);
		panel.setWidgetLeftWidth(observacionesLabel, 0.0, Unit.PCT, 19.8, Unit.PCT);
		panel.setWidgetTopHeight(observacionesLabel, 260.0, Unit.PX, 19.0, Unit.PX);
		
		TextArea observacionesTA = new TextArea();
		panel.add(observacionesTA);
		panel.setWidgetLeftWidth(observacionesTA, 20.0, Unit.PCT, 75.0, Unit.PCT);
		panel.setWidgetTopHeight(observacionesTA, 255.0, Unit.PX, 47.0, Unit.PX);
		observacionesTA.setText(formatear(proveedor.getObservaciones()));
		observacionesTA.setEnabled(false);
		
		Label lblContacto = new Label("CONTACTOS");
		lblContacto.setStyleName("labelTitulo");
		panel.add(lblContacto);
		panel.setWidgetLeftWidth(lblContacto, 2.5, Unit.PCT, 95.0, Unit.PCT);
		panel.setWidgetTopHeight(lblContacto, 300.0, Unit.PX, 50.0, Unit.PX);
		
		ScrollPanel spContactos = new ScrollPanel();
		spContactos.setStyleName("tabla");
		panel.add(spContactos);
		panel.setWidgetLeftWidth(spContactos, 5.0, Unit.PCT, 90.0, Unit.PCT);
		panel.setWidgetTopHeight(spContactos, 350.0, Unit.PX, 250.0, Unit.PX);
		
		ftContactos = new FlexTable();
		spContactos.setWidget(ftContactos);
		ftContactos.setSize("100%", "100%");
		
		//seteamos el encabezado de la tabla
		//columan nombre
		ftContactos.setText(0, COL_NOMBRE, "NOMBRE");
		ftContactos.getCellFormatter().setWidth(0, COL_NOMBRE, "14%");
		
		//columna cargo
		ftContactos.setText(0, COL_CARGO, "CARGO");
		ftContactos.getCellFormatter().setWidth(0, COL_CARGO, "14%");
		
		//columna teléfono empresa
		ftContactos.setText(0, COL_TELEFONO_EMPRESA, "TELÉFONO EMPRESA");
		ftContactos.getCellFormatter().setWidth(0, COL_TELEFONO_EMPRESA, "14%");
		
		//columna interno
		ftContactos.setText(0, COL_INTERNO, "INTERNO");
		ftContactos.getCellFormatter().setWidth(0, COL_INTERNO, "14%");
		
		//columan teléfono particular
		ftContactos.setText(0, COL_TELEFONO_PARTICULAR, "TELÉFONO PARTICULAR");
		ftContactos.getCellFormatter().setWidth(0, COL_TELEFONO_PARTICULAR, "14%");
		
		//columna celular
		ftContactos.setText(0, COL_CELULAR, "CELULAR");
		ftContactos.getCellFormatter().setWidth(0, COL_CELULAR, "14%");
		
		//columna correo
		ftContactos.setText(0, COL_CORREO, "E-MAIL");
		ftContactos.getCellFormatter().setWidth(0, COL_CORREO, "14%");
		
		//seteamos el estilo de la tabla
		ftContactos.getRowFormatter().addStyleName(0, "tablaEncabezado");
		
		Label lblPie = new Label("");
		lblPie.setStyleName("labelTitulo");
		panel.add(lblPie);
		panel.setWidgetLeftWidth(lblPie, 2.4, Unit.PCT, 95.0, Unit.PCT);
		panel.setWidgetTopHeight(lblPie, 570.0, Unit.PX, 50.0, Unit.PX);
		
		Button btnSalir = new Button();		
		btnSalir.setText("SALIR");
		
		//cuando se presiona el botón salir
		btnSalir.addClickHandler(new ClickHandler() {
			public void onClick(ClickEvent event) {
				salir();
			}
		});
		
		panel.add(btnSalir);
		panel.setWidgetRightWidth(btnSalir, 5.0, Unit.PCT, 10.0, Unit.PCT);
		panel.setWidgetBottomHeight(btnSalir, 15.0, Unit.PX, 28.0, Unit.PX);
		
		cargarTablaContactos();
	}
	
	
	/**
	 * Método que formatea una dirección.
	 * @return String. Retorna la dirección del proveedor como un string.
	 */
	private String formatearDireccion(DireccionDTO direccionDTO)
	{
		String direccion = direccionDTO.getPais() + ", " 
							+ direccionDTO.getProvincia() + ", "
							+ direccionDTO.getLocalidad() + ", "
							+ direccionDTO.getCalle() + direccionDTO.getAltura();
		
		
		if(direccionDTO.getPiso() != null)
			if(!direccionDTO.getPiso().equals(""))
				direccion = direccion + ", piso " + direccionDTO.getPiso();
		
		if(direccionDTO.getOficina() != null)
			if(!direccionDTO.getOficina().equals(""))
				direccion = direccion + ", oficina " + direccionDTO.getOficina();
				
		return direccion;
	}
	
	/**
	 * Método que formatea la información del proveedor. Si el dato es vacío el mismo se setea como "NO ESPECIFICADO"
	 * @return
	 */
	private String formatear(String dato)
	{
		if(dato == null || dato.equals(""))
			return "NO ESPECIFICADO";
		
		return dato;
	}
	
	
	/**
	 * Método que carga la tabla de contactos
	 */
	private void cargarTablaContactos()
	{
		for (int i = 0; i < proveedor.getContacto().size(); i++){				
			ftContactos.setText(i+1, COL_NOMBRE, proveedor.getContacto().get(i).getNombre());
			ftContactos.setText(i+1, COL_CARGO, proveedor.getContacto().get(i).getCargo());
			ftContactos.setText(i+1, COL_TELEFONO_EMPRESA, proveedor.getContacto().get(i).getTelefonoEmpresa());
			ftContactos.setText(i+1, COL_INTERNO, proveedor.getContacto().get(i).getInternoEmpresa());
			ftContactos.setText(i+1, COL_TELEFONO_PARTICULAR, proveedor.getContacto().get(i).getTelefonoParticular());
			ftContactos.setText(i+1, COL_CELULAR, proveedor.getContacto().get(i).getCelular());
			ftContactos.setText(i+1, COL_CORREO, proveedor.getContacto().get(i).getMail());
			ftContactos.getRowFormatter().setStyleName(i+1, "tablaRenglon");
		}
		
	}
	
	/**
	 * Método que cierra el pop up
	 */
	private void salir()
	{
		this.hide();
	}
}
